package com.up.upzl.biz.repository;

import java.util.List;

import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.transaction.annotation.Transactional;

import com.up.upzl.base.repository.BaseRepository;
import com.up.upzl.biz.domain.Article;
import com.up.upzl.biz.domain.Article.Auditing;
import com.up.upzl.biz.domain.Module.PageType;
import com.up.upzl.biz.domain.Module.ShowType;
import com.up.upzl.biz.domain.ModuleArticle;

/**
 * 内容管理-模块管理
 * 
 * @author youke
 *
 */
public interface ArticleRepository extends BaseRepository<Article, Long> {

	/**
	 * 置顶文章
	 * 
	 * @param id
	 *            文章ID
	 * @return 影响条数
	 */
	@Transactional
	@Modifying
	@Query(value = "update article set sort = ((select sort from (select coalesce(max(sort), 0) as sort from article) as sort) + 1) where id = ?1", nativeQuery = true)
	Integer setToTop(Long id);

	/**
	 * 根据模块类型查询文章
	 * 
	 * @param pageType
	 *            类型
	 * @param showType
	 *            显示类型
	 * @return 文章列表
	 */
	@Query("select ma from ModuleArticle ma join ma.module m where m.pageType = ?1 and m.showType = ?2 order by ma.sort desc")
	List<ModuleArticle> findByModuleType(PageType pageType, ShowType showType);

	/**
	 * 通过Id判断文章是否存在
	 * 
	 * @param id
	 * @return
	 */
	Boolean existsById(@Param("id") Long id);

	/**
	 * 通过Id和状态判断文章是否存在
	 * 
	 * @param id
	 * @param 通过
	 * @return
	 */
	Boolean existsByIdAndAuditing(Long id, Auditing 通过);
}
